﻿Imports System.Data
Imports MyGeneration.dOOdads

Public Class rc_Productos

    Private _MessageError As Exception = Nothing
    Public Property MessageError() As Exception
        Get
            Return _MessageError
        End Get
        Set(value As Exception)
            _MessageError = value
        End Set
    End Property


#Region "Productos"

    Public Function Control_Productos_Ventas(conn As String, codProducto As Integer) As Boolean
        Try
            Dim venta As New Class_RC_Data.Class_RC.VistaVentasDetalle(conn)
            venta.Where.CodProducto.Value = codProducto
            If venta.Query.Load Then

                For i As Integer = 0 To venta.DefaultView.Table.Rows.Count - 1

                    Dim ventaCab As New Class_RC_Data.Class_RC.VistaVentas(conn)
                    ventaCab.Where.CodVenta.Value = venta.DefaultView.Table.Rows(i)("CodVenta")
                    ventaCab.Where.EstadoVenta.Value = "ANULADA"
                    ventaCab.Where.EstadoVenta.Operator = WhereParameter.Operand.Like
                    If ventaCab.Query.Load Then
                        Return True
                    End If

                Next

                Return True

            End If

            Return False

        Catch ex As Exception
            MessageError = ex
            Return False
        End Try
    End Function

    Public Function Insert_Productos(conn As String, descripcion As String, cantExistente As Decimal, cantMinima As Decimal,
                                     cantMaxima As Decimal, codUnidMedida As Decimal, codTipoProd As Decimal, utilidad As Decimal,
                                     costoMano As Decimal, precioVenta As Decimal, totalMateriales As Decimal, porcUtili As Decimal,
                                     codUsuario As Integer) As Integer

        Dim tx As TransactionMgr
        tx = TransactionMgr.ThreadTransactionMgr()

        Try
            tx.BeginTransaction()

            Dim producto As New Class_RC_Data.Class_RC.PRODUCTOS(conn)

            producto.AddNew()
            producto.DescProducto = descripcion
            producto.CantExistente = cantExistente
            producto.CantMin = cantMinima
            producto.CantMax = cantMaxima
            producto.CodUniMedida = codUnidMedida
            producto.CodTipoProducto = codTipoProd
            producto.Utilidad = utilidad
            producto.CostoMano = costoMano
            producto.PrecioVenta = precioVenta
            producto.TotalMateriales = totalMateriales
            producto.PorcUtilidad = porcUtili
            producto.CodUsuario = codUsuario
            producto.FechaActualizacion = DateTime.Now
            producto.Save()

            tx.CommitTransaction()

            Return producto.CodProducto

        Catch ex As Exception
            tx.RollbackTransaction()
            MessageError = ex
            Return 0
        End Try

    End Function

    Public Function Update_Productos(conn As String, codProducto As Integer,
                                     descripcion As String, cantExistente As Decimal, cantMinima As Decimal,
                                     cantMaxima As Decimal, codUnidMedida As Decimal, codTipoProd As Decimal, utilidad As Decimal,
                                     costoMano As Decimal, precioVenta As Decimal, totalMateriales As Decimal, porcUtili As Decimal,
                                     codUsuario As Integer) As Boolean

        Dim tx As TransactionMgr
        tx = TransactionMgr.ThreadTransactionMgr()

        Try
            tx.BeginTransaction()

            Dim producto As New Class_RC_Data.Class_RC.PRODUCTOS(conn)
            producto.Where.CodProducto.Value = codProducto

            If producto.Query.Load Then

                producto.DescProducto = descripcion
                producto.CantExistente = cantExistente
                producto.CantMin = cantMinima
                producto.CantMax = cantMaxima
                producto.CodUniMedida = codUnidMedida
                producto.CodTipoProducto = codTipoProd
                producto.Utilidad = utilidad
                producto.CostoMano = costoMano
                producto.PrecioVenta = precioVenta
                producto.TotalMateriales = totalMateriales
                producto.PorcUtilidad = porcUtili
                producto.CodUsuario = codUsuario
                producto.FechaActualizacion = DateTime.Now
                producto.Save()

            End If

            tx.CommitTransaction()
            Return True

        Catch ex As Exception
            tx.RollbackTransaction()
            MessageError = ex
            Return False
        End Try

    End Function

    Public Function Delete_Productos(conn As String, codProducto As Integer) As Boolean

        Dim tx As TransactionMgr
        tx = TransactionMgr.ThreadTransactionMgr()

        Try
            tx.BeginTransaction()

            Dim producto As New Class_RC_Data.Class_RC.PRODUCTOS(conn)
            producto.Where.CodProducto.Value = codProducto

            If producto.Query.Load Then

                producto.MarkAsDeleted()
                producto.Save()

            End If

            tx.CommitTransaction()
            Return True

        Catch ex As Exception
            tx.RollbackTransaction()

            If ex.Message.Contains("FK_DETALLEPRODUCTO") Then
                MessageError = New Exception("No se puede eliminar un producto que ya ha sido utilizado.")
            Else
                MessageError = ex
            End If

            Return False

        End Try

    End Function

    Public Function get_Productos_All(conn As String, codProducto As Integer,
                                      descripcion As String, codTipoProducto As Integer,
                                      soloConPrecio As Boolean) As DataTable
        Try

            Dim vPro As New Class_RC_Data.Class_RC.VistaProductos(conn)

            If codProducto > 0 Then
                vPro.Where.CodProducto.Value = codProducto
            End If

            If descripcion <> "" Then
                vPro.Where.DescProducto.Value = "%" & descripcion & "%"
                vPro.Where.DescProducto.Operator = WhereParameter.Operand.Like
            End If

            If codTipoProducto > 0 Then
                vPro.Where.CodTipoProducto.Value = codTipoProducto
            End If

            If soloConPrecio Then
                vPro.Where.PrecioVenta.Value = 0
                vPro.Where.PrecioVenta.Operator = WhereParameter.Operand.GreaterThan
            End If

            vPro.Query.AddOrderBy("descTipoProducto", WhereParameter.Dir.ASC)
            vPro.Query.AddOrderBy("descProducto", WhereParameter.Dir.ASC)

            If vPro.Query.Load Then
                If vPro.DefaultView.Table.Rows.Count > 0 Then
                    Return vPro.DefaultView.Table
                Else
                    Return Nothing
                End If

            Else
                Return Nothing

            End If

        Catch ex As Exception
            MessageError = ex
            Return Nothing
        End Try

    End Function

    Public Function get_tipo_Productos(conn As String) As DataTable
        Try

            Dim vTipoPro As New Class_RC_Data.Class_RC.TIPOPRODUCTO(conn)

            If vTipoPro.Query.Load Then
                If vTipoPro.DefaultView.Table.Rows.Count > 0 Then
                    Return vTipoPro.DefaultView.Table
                Else
                    Return Nothing
                End If

            Else
                Return Nothing

            End If

        Catch ex As Exception
            MessageError = ex
            Return Nothing
        End Try

    End Function

    Public Function get_tipo_Servicios(conn As String) As DataTable
        Try

            Dim vTipoPro As New Class_RC_Data.Class_RC.TIPOSERVICIO(conn)

            If vTipoPro.Query.Load Then
                If vTipoPro.DefaultView.Table.Rows.Count > 0 Then
                    Return vTipoPro.DefaultView.Table
                Else
                    Return Nothing
                End If

            Else
                Return Nothing

            End If

        Catch ex As Exception
            MessageError = ex
            Return Nothing
        End Try

    End Function

    Public Function get_empleados(conn As String) As DataTable
        Try

            Dim vTipoPro As New Class_RC_Data.Class_RC.VistaEmpleados(conn)

            If vTipoPro.Query.Load Then
                If vTipoPro.DefaultView.Table.Rows.Count > 0 Then
                    Return vTipoPro.DefaultView.Table
                Else
                    Return Nothing
                End If

            Else
                Return Nothing

            End If

        Catch ex As Exception
            MessageError = ex
            Return Nothing
        End Try

    End Function

    Public Function get_tipo_unidMedida(conn As String) As DataTable
        Try

            Dim vTipoUni As New Class_RC_Data.Class_RC.UNIMEDIDA(conn)

            If vTipoUni.Query.Load Then
                If vTipoUni.DefaultView.Table.Rows.Count > 0 Then
                    Return vTipoUni.DefaultView.Table
                Else
                    Return Nothing
                End If

            Else
                Return Nothing

            End If

        Catch ex As Exception
            MessageError = ex
            Return Nothing
        End Try

    End Function

    Public Function get_Materiales(conn As String, codMaterial As Integer) As DataTable
        Try

            Dim vMateriales As New Class_RC_Data.Class_RC.VistaMateriales(conn)

            If codMaterial > 0 Then
                vMateriales.Where.CodMaterial.Value = codMaterial
            End If

            vMateriales.Query.AddOrderBy("DescMaterial", WhereParameter.Dir.ASC)

            If vMateriales.Query.Load Then
                If vMateriales.DefaultView.Table.Rows.Count > 0 Then
                    Return vMateriales.DefaultView.Table
                Else
                    Return Nothing
                End If

            Else
                Return Nothing

            End If

        Catch ex As Exception
            MessageError = ex
            Return Nothing
        End Try

    End Function

    Public Function get_Materiales_Detalle(conn As String, codMaterial As Integer) As DataTable
        Try

            Dim vMateriales As New Class_RC_Data.Class_RC.VistaMaterialesDetalle(conn)

            If codMaterial > 0 Then
                vMateriales.Where.CodMaterial.Value = codMaterial
            End If

            'vMateriales.Query.AddOrderBy("DescMaterial", WhereParameter.Dir.ASC)

            If vMateriales.Query.Load Then
                If vMateriales.DefaultView.Table.Rows.Count > 0 Then
                    Return vMateriales.DefaultView.Table
                    'vMateriales.

                Else
                    Return Nothing
                End If

            Else
                Return Nothing

            End If

        Catch ex As Exception
            MessageError = ex
            Return Nothing
        End Try

    End Function

    Public Function Insert_Productos_Detalle(conn As String, codProducto As Integer, codMaterial As Integer,
                                             cantMaterial As Integer, costoMaterial As Decimal) As Boolean

        Dim tx As TransactionMgr
        tx = TransactionMgr.ThreadTransactionMgr()

        Try
            tx.BeginTransaction()

            Dim producto As New Class_RC_Data.Class_RC.DETALLEPRODUCTO(conn)

            producto.AddNew()
            producto.CodProducto = codProducto
            producto.CodMaterial = codMaterial
            producto.CantMat = cantMaterial
            producto.CostoMat = costoMaterial
            producto.Save()

            tx.CommitTransaction()

            Return True

        Catch ex As Exception
            tx.RollbackTransaction()
            MessageError = ex
            Return False
        End Try

    End Function

    Public Function Delete_Productos_Detalle(conn As String, codProducto As Integer, codMaterial As Integer) As Boolean

        Dim tx As TransactionMgr
        tx = TransactionMgr.ThreadTransactionMgr()

        Try
            tx.BeginTransaction()

            Dim producto As New Class_RC_Data.Class_RC.DETALLEPRODUCTO(conn)

            producto.Where.CodProducto.Value = codProducto
            producto.Where.CodMaterial.Value = codMaterial
            If producto.Query.Load Then
                producto.MarkAsDeleted()
                producto.Save()
            End If

            tx.CommitTransaction()

            Return True

        Catch ex As Exception
            tx.RollbackTransaction()
            MessageError = ex
            Return False
        End Try

    End Function

    Public Function get_Productos_Detalles_All(conn As String, codProducto As Integer) As DataTable
        Try

            Dim vPro As New Class_RC_Data.Class_RC.VistaProductosDetalle(conn)

            If codProducto > 0 Then
                vPro.Where.CodProducto.Value = codProducto
            End If

            'If descripcion <> "" Then
            '    vPro.Where.DescProducto.Value = "%" & descripcion & "%"
            '    vPro.Where.DescProducto.Operator = WhereParameter.Operand.Like
            'End If

            'If codTipoProducto > 0 Then
            '    vPro.Where.CodTipoProducto.Value = codTipoProducto
            'End If

            If vPro.Query.Load Then
                If vPro.DefaultView.Table.Rows.Count > 0 Then
                    Return vPro.DefaultView.Table
                Else
                    Return Nothing
                End If

            Else
                Return Nothing

            End If

        Catch ex As Exception
            MessageError = ex
            Return Nothing
        End Try

    End Function

#End Region

End Class
